package controlador;


import java.awt.AWTEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import modelo.CategoriaDAO;
import modelo.Cliente;
import modelo.ClienteDAO;
import modelo.DetalleProducto;
import modelo.Ingrediente;
import modelo.IngredienteDAO;
import modelo.Producto;
import modelo.ProductoDAO;


import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import modelo.*;

import vista.VentanaConsultaProducto;
import vista.VentanaIngredienteModeloTabla;
import vista.VentanaOrden;
import vista.VentanaTablaOrdenProducto;


public class ControladorVentanaOrden implements ActionListener {

	private VentanaOrden ventanaOrden;

	private CategoriaDAO categoriaDAO = new CategoriaDAO();
	private ProductoDAO productoDAO = new ProductoDAO();
	private OrdenDAO ordenDAO = new OrdenDAO();
	private DetalleOrdenDAO detOrdenDAO = new DetalleOrdenDAO();
	private DetalleOrden detOrden = new DetalleOrden();
	private ClienteDAO clienteDAO = new ClienteDAO();
	float valor = 0;
	float valortotal = 0;

	public ControladorVentanaOrden() {
		super();
		ventanaOrden = new VentanaOrden();
		ventanaOrden.setLocationRelativeTo(null);
		ventanaOrden.setVisible(true);
		ventanaOrden.addListener(this);

		List<String> milista= new ArrayList<String>();
		milista=categoriaDAO.consultarCategoriasNombre();
		ventanaOrden.setcargarComboCategoria(milista);
		List<String> milistaproductos= new ArrayList<String>();
		milistaproductos= productoDAO.consultarProductosNombre();
		ventanaOrden.setcargarComboProducto(milistaproductos);
		ventanaOrden.setJtxtcodcategoria(categoriaDAO.buscarCategoria(ventanaOrden.getJcmbCategoriaOrden()));
		ventanaOrden.setcargarComboProducto(milistaproductos); 
		ventanaOrden.setcargarComboProducto(productoDAO.buscarProductosCategoria(ventanaOrden.getJtxtcodcategoria())); 
		ventanaOrden.setJtxtCodProductoOrden(productoDAO.buscarCodProducto(ventanaOrden.getJcmbProductoOrden())); 
	}


	public void actionPerformed(ActionEvent e) {
		String  actionCommand  = e.getActionCommand();
		if  (actionCommand.equals("Registrar")) {
			RegistrarCliente();
		}
		else if(e.getActionCommand().equals("Procesar")){
			ProcesarOrden();
		}
		else if(actionCommand.equals("Buscar")){
			BuscarCliente();
		}
		else if(actionCommand.equals("Cancelar"))
			ventanaOrden.borrarDatos();
		else if(actionCommand.equals("Salir"))
			ventanaOrden.dispose();
		else if(!(ventanaOrden.getJcmbCategoriaOrden().equals(AWTEvent.MOUSE_EVENT_MASK))){
			ventanaOrden.setJtxtcodcategoria(categoriaDAO.buscarCategoria(ventanaOrden.getJcmbCategoriaOrden()));
			ventanaOrden.setcargarComboProducto(productoDAO.buscarProductosCategoria(ventanaOrden.getJtxtcodcategoria()));
		}
		else if(!(ventanaOrden.getJcmbCategoriaOrden().equals(AWTEvent.MOUSE_EVENT_MASK))){
			ventanaOrden.setJtxtCodProductoOrden(productoDAO.buscarCodProducto(ventanaOrden.getJcmbProductoOrden()));
		}

		if  (actionCommand.equals("Cargar Productos ")){
			ProductoDAO productoDAO = new ProductoDAO();
			List<Producto> productos = productoDAO.consultarProductos();
			this.ventanaOrden.IngresarProductos(new VentanaTablaOrdenProducto(productos));
			for(int i = 0; i < ventanaOrden.getjTableOrdenProducto().getRowCount(); i++){
				valor =  Float.parseFloat(ventanaOrden.getjTableOrdenProducto().getValueAt(i,2).toString());
				valortotal = valortotal + valor;
			}
			String nuevovalor =String.valueOf(valortotal);
			ventanaOrden.setJtxtTotalPagar(nuevovalor);
		}


	}

	public void RegistrarCliente() {
		try
		{
			if( ventanaOrden.getCedulaCli().equals("")|| 
					ventanaOrden.getNombre().equals("")||
					ventanaOrden.getApellido().equals("")||
					ventanaOrden.getDireccion().equals("")||
					ventanaOrden.getTelefono().equals(""))


				ventanaOrden.mostrarMensaje("Debe llenar todos los campos");
			else
			{
				if (clienteDAO.buscarCliente(ventanaOrden.getCedulaCli()).equals(null)){
				ClienteDAO clienteDAO = new ClienteDAO();
				String cedula =  ventanaOrden.getCedulaCli();
				String nombre =  ventanaOrden.getNombre();
				String apellido = ventanaOrden.getApellido();
				String direccion = ventanaOrden.getDireccion();
				String telefono =  ventanaOrden.getTelefono();
				Cliente cliente = new Cliente(cedula,nombre,apellido,direccion,telefono);
				clienteDAO.registrarCliente(cliente);
				ventanaOrden.mostrarMensaje("El cliente se ha registrado exitosamente");
				ventanaOrden.CamposNoEditables();
				}
				else
				ventanaOrden.mostrarMensaje("Cliente ya registrado en nuestra base de datos");
			}
		}
		catch(Exception e)
		{
			ventanaOrden.mostrarMensaje("El Cliente No se pudo registrar, verifique que los datos sean correctos");
			ventanaOrden.borrarDatos();
		}
	}

	public void ProcesarOrden(){
		try
		{
			if( ventanaOrden.getCodProductoOrden().equals("")|| 
					ventanaOrden.getCodOrden().equals("")||
					ventanaOrden.getApellido().equals("")||
					ventanaOrden.getCedulaCli().equals("")||
					ventanaOrden.getTotalPagar().equals("")||
					ventanaOrden.getFechaOrden().equals("")||
					ventanaOrden.getTelefono().equals("")){

				ventanaOrden.mostrarMensaje("Debe llenar todos los campos");
			}
			else
				if(ventanaOrden.getTotalPagar().equals(""))
					ventanaOrden.mostrarMensaje("Debe ingresar por lo menos un producto a la orden");
				else    
				{
					productoDAO = new ProductoDAO();
					String codOrden =  ventanaOrden.getCodOrden();
					String cedulaCli =  ventanaOrden.getCedulaCli();
					String fechaOrden =  ventanaOrden.getFechaOrden();
					float totalPagar = Float.parseFloat(ventanaOrden.getTotalPagar());
					Orden orden = new Orden(codOrden,cedulaCli,fechaOrden,totalPagar);
					ordenDAO.registrarOrden(orden);

					DetalleOrden detOrden;
					for(int i = 0; i < ventanaOrden.getjTableOrdenProducto().getRowCount(); i++)
					{
						String codProducto = ventanaOrden.getjTableOrdenProducto().getValueAt(i,0).toString();
						String descProd = ventanaOrden.getjTableOrdenProducto().getValueAt(i,1).toString();
						float precio = Float.parseFloat(ventanaOrden.getjTableOrdenProducto().getValueAt(i,2).toString());
						int cant =  Integer.parseInt(ventanaOrden.getjTableOrdenProducto().getValueAt(i,3).toString());
						ordenDAO = new OrdenDAO();
						detOrden = new DetalleOrden(codOrden,codProducto,descProd,cant,precio);
						detOrdenDAO.registrarDetalleOrden(detOrden);
					}
					ventanaOrden.borrarDatos();
					ventanaOrden.mostrarMensaje("La Orden se ha procesado exitosamente");
				}
		}
		catch(Exception e)
		{
			ventanaOrden.mostrarMensaje("La Orden No se pudo procesar, verifique que los datos sean correctos");
			ventanaOrden.borrarDatos();
		}
	}

	public void BuscarCliente(){
		if(ventanaOrden.getCedulaCli().equals("")){
			ventanaOrden.mostrarMensaje("Debe llenar el campo referente al campo cedula del cliente");
		}
		else{
			String cedula = ventanaOrden.getCedulaCli();
			if (!clienteDAO.buscarCliente(cedula).equals(null)){
				String nomb = clienteDAO.buscarCliente(cedula).getNombre();
				String apell = clienteDAO.buscarCliente(cedula).getApellido();
				String dir = clienteDAO.buscarCliente(cedula).getDireccion();
				String telf = clienteDAO.buscarCliente(cedula).getTelefono();
				ventanaOrden.setJtxtNombreCli(nomb);
				ventanaOrden.setJtxtApellido(apell);
				ventanaOrden.setJtxtDireccion(dir);
				ventanaOrden.setJtxtTelefono(telf);
			}
			else
				ventanaOrden.mostrarMensaje("Cliente no encontrado, por favor verifique");
		}
	}
	
}
